int firstMissingPositive(int* nums, int numsSize){
    int i;
    for (i = 0; i < numsSize; i++) {
        if (nums[i] < 0 || nums[i] >numsSize) // 非法数值
            nums[i] = 0;    
    }

    for (i = 0; i < numsSize; i++) {
        while (nums[i] != 0 && nums[i] != i+1) {    // 错误位置
            // i位置的数值应该去num[i]-1位置
            if (nums[nums[i]-1] == nums[i]) {   // 如果num[i]-1位置已经坐着对的人
                break;
            } else {    // 否则将i位置的数值交换到对的位置
                int temp = nums[nums[i]-1];
                nums[nums[i]-1] = nums[i];
                nums[i] = temp;
            }
        }
    }
    for (i = 0; i < numsSize; i++)
        if (nums[i] != i+1) break;
    return (i+1); 
}